/*
* name: tab.js
* version: v1.3.2
* update: 回调执行时间bug
* date: 2014-11-20
*/
define(function(require, exports, module) {
	var $ = require('jquery');
	require('./tab.css');
	
	$.fn.tab = function(config) {
		var opt = {
				tabs: ".tab_t",			//标签
				conts: ".tab_c",		//内容
				width_auto: false,		//标签自适应宽度
				posi_auto: true,		//标签自动定位，关闭后可以样式控制
				left: 0,				//第一个标签距左起始位置
				auto:false,				//是否自动播放，默认否
				time:5e3,				//自动播放间隔，默认5s
				start:0,				//初始显示，默认第一个
				margin: 0,				//标签间距
				act: 'click',			//触发动作
				callback: function(){},	//回调方法 @param ($this,$tab_t,index) : 当前对象，标签，当前帧序号
				ext: function(){}		//扩展方法 @param ($this,$tab_t,opts) : 当前对象，标签，配置
			},
			$this = $(this).addClass('tab tabID'+parseInt(Math.random()*1e5)),
			toggletab, tab_t_collect, tiemout, $tab_t, $tab_c;		
		$.extend(opt, config || {}, $this.data('config') || {});

		$tab_t = $this.find(opt.tabs);
		$tab_c = $this.find(opt.conts);
		toggletab = function (i) {
			$tab_t.eq(i).addClass('tab_t_cur').siblings().removeClass('tab_t_cur');
			$tab_c.eq(i).addClass('tab_c_cur').siblings().removeClass('tab_c_cur');
			opt.callback($this,$tab_t,i);
		};
		tab_t_collect = (' '+$this.attr('class')).split(' ').join('.') + " "+opt.tabs;

		//容错1
		if($tab_t.length!==$tab_c.length){
			if(window.console){
				console.log("tabs'length !== conts'length");
			}
			return $this;
		}
		if (opt.width_auto) {
			$tab_t.width(1 / $tab_t.length * 100 + '%');
		}	
		tiemout = (opt.act === 'mouseover') ? 150 : 0;

		$tab_t.each(function(i,e) {
			if(opt.posi_auto){
				var leftPx = 0;
				for (var _i = 0;_i<i; _i++){
					leftPx+=parseFloat($tab_t.eq(_i).outerWidth(true));
				};
				$(e).css({'left': opt.width_auto ? 1 / $tab_t.length * 100 * i + '%' : leftPx + opt.left + opt.margin * i
				});
			}
			if (!i) {
				$(e).addClass('first');
			}		
		}).on(opt.act, function(event) {
			event.preventDefault();
			var index = $(this).index(tab_t_collect),
				_timeout,
				_last;
			if (event.timeStamp) {
				_last = event.timeStamp;
				_timeout=setTimeout(function() {
					if (_last - event.timeStamp == 0) {
						toggletab(index);
					};
				}, tiemout);
			} else {
				toggletab(index);
			};
			
		})	
			
		//扩展
		opt.ext($this,$tab_t,opt);
		//容错2
		if($tab_t.length<=1){
			$tab_t.eq(opt.start).trigger(opt.act);
			return $this;
		};
		//启动
		$tab_t.eq(opt.start).trigger(opt.act);
		
		//自动播放
		if(opt.auto){
			var i = opt.start;
			var auto = function(){						
				i = i >= $tab_t.length - 1 ? 0 : ++i;
				$tab_t.eq(i).trigger(opt.act);
			},
			t = window.setInterval(function(){auto()},opt.time);
			$tab_c.hover(function(){
				window.clearInterval(t);
			},function(){
				t = window.setInterval(function(){auto()},opt.time);
			});
		}
		
		//返回自身
		return $this;
	};

})